/*
 * @lc app=leetcode.cn id=38 lang=golang
 * @lcpr version=30118
 *
 * [38] 外观数列
 */

// @lcpr-template-start

// @lcpr-template-end
// @lc code=start
func countAndSay(n int) string {
	if n == 1 {
		return "1"
	}
	m := map[int]string{
		1: "1",
	}
	for i := 2; i <= n; i++ {
		m[i] = count(m[i-1])
	}
	return m[n]
}

func count(s string) string {
	res := ""
	for i := 0; i < len(s); {
		j := i + 1
		for ; j < len(s) && s[j] == s[i]; j++ {
		}
		res = res + strconv.Itoa(j-i) + string(s[i])
		i = j
	}
	return res
}

// @lc code=end

/*
// @lcpr case=start
// 1\n
// @lcpr case=end

// @lcpr case=start
// 4\n
// @lcpr case=end

*/

